Norris headed Max Verstappen and Charles Leclerc as Piastri finished well down the order following a clash with Carlos Sainz.
Piastri starred in the opening laps before the Safety Car, which benefitted Norris, left him exposed at the restart.
A scrap with Sainz resulted, leaving Piastri with damage when the Spaniard locked the rear axle and clouted the Australian’s front wing, forcing him to pit to cruel his strong chances of a podium result.
At the race start, Verstappen jumped well from pole as the slow-starting Leclerc was swamped into the first corner.
His blushes were saved by Sergio Perez, who went deep and skated well beyond the apex, forcing Sainz to open the steering and allow his team-mate back through.
Oscar Piastri also snuck up to third as Perez slotted into fifth and under pressure from Lando Norris.
At the end of the opening lap, Verstappen was 1.3s clear of Leclerc, then Piastri, Sainz, Perez, Norris, Nico Hulkenberg, Lewis Hamilton, Yuki Tsunoda, and George Russell.
Further back, Pierre Gasly was victorious in a scrap with team-mate Esteban Ocon, the Alpine duo having run side by side for half a lap.
Piastri and Sainz were in queue behind Leclerc, who was at the head of a small DRS train in the early laps.
Another one formed behind Hulkenberg in seventh, the field from Hamilton to 16th, all in DRS range of the car ahead.
On Lap 4, Piastri moved up to second with a pass at Turn 17, using DRS to ease by Leclerc with ease.
He was then forced to defend from the Ferrari, who had DRS, into the opening corner. It was a challenge he saw off with ease as Sainz began to harry his team-mate.
After 10 laps, Verstappen headed the field by 2.7s over Piastri, who had Leclerc and Sainz in DRS range behind him.
Perez was a further 1.7s back in fourth, a similar distance ahead of Norris.
Hulkenberg had drifted to 6.5s behind the McLaren in seventh, having briefly swapped places with Hamilton in eighth, then Russell and Tsunoda, who were caught in the Haas’ DRS train.
Having started last, Ricciardo remained at the back of the pack on his hard tyres, though was in the wheel tracks of Kevin Magnussen.
At the end of the lap, Alex Albon opened the pit sequence when he pulled into the lane, swapping from the medium tyres onto the hards.
Once Hamilton finally made the move stick on Hulkenberg on Lap 11, the floodgates opened and he quickly fell behind Russell too.
Haas hauled the German in at the end of Lap 12, Gasly also in the lane as they rejoined ahead of the Lance Stroll-Albon battle in 15th and 16th, respectively.
In fifth, Perez was under pressure from Norris as the Red Bull Racing driver struggled for pace at the end of his opening stint.
Race leader Verstappen was told to lift the pace as Piastri remained under three seconds behind the Dutchman, posing a threat to his advantage come their own stops.
Perez dived into the pits after 18 laps, releasing Norris who’d been tucked up underneath the rear of the RB20.
Leclerc pitted after 19 laps, taking on a set of hard tyres to feed out ahead of Russell in sixth place.
In the middle of the pit cycle, Verstappen held a 3.6s advantage over Piastri while Sainz was 2.5s further back in third.
Then came Norris, Hamilton, Leclerc, Russell, Tsunoda, Perez, and Ocon.
A mistake from Verstappen at the chicane at Turn 14/15 saw the pole sitter hit the bollard on the apex of the right-hander, depositing it just off the racing line at the start of the back straight.
It was a short interruption, the leaders having all passed pit exit, but played into the hands of some of those at the back.
Ocon, Zhou Guanyu, and Magnussen all took the opportunity to stop.
Red Bull Racing boxed the race leader at the end of Lap 23 as he rejoined fourth, leaving Piastri in control of proceedings by 2.8s over Sainz.
McLaren called Piastri in from the lead at the end of Lap 27, followed in by Sainz.
The Australian rejoined fourth, behind Leclerc in a net fourth – an effective third given Norris was yet to stop.
The race was soon turned upside down when Magnussen and Logan Sargeant came a cropper on Lap 28; the Safety Car deployed as the Williams sat with its rear end damaged at Turn 3.
Magnussen had been challenging the American, drawing alongside after cutting back exiting Turn 1, the pair coming together two corners later.
The Williams driver was clearly unaware of the Haas alongside him, pitching him into a spin and out of his home race in a clash that landed Magnussen with a 10-second penalty.
The Safety Car fell perfectly for Norris, who was the last man yet to pit, allowing him to maintain the race lead.
The race resumed at the start of Lap 33, with Norris leading from Verstappen, Leclerc, Piastri, Sainz, Perez, Tsunoda, Hamilton, Russell, and Ocon.
Norris was forced to defend into Turn 1 from Verstappen while Sainz almost made contact with the rear of Piastri’s car as they braked into the right-hander.
Rather than attacking the leading McLaren, Verstappen was instead forced to defend from Leclerc as he fell 1.2s away from the race lead at the end of the lap.
Piastri and Sainz battled for fourth, the Ferrari driver forcing his rival to go defensive into Turn 11.
The Spaniard ran off the road as Piastri seized the racing line and refused to move, the pair briefly making contact in the process.
It was an exchange that officials noted for ‘forcing another driver off the track’ but there was no further action.
Out front, Norris was extending his advantage over Verstappen, the McLaren driver 1.6s clear after 35 laps.
The scrap for fourth remained intense, Sainz trying again into Turn 11 on Lap 36 but again rebuffed by Piastri.
Sainz finally elbowed his way through into Turn 17, propping on the apex before Piastri fought back as they started Lap 40.
The Spaniard locked the rear axle into Turn 17, skating beyond the apex as Piastri turned into the corner, tagging the Ferrari’s rear wheel as it slid out.
When they got to Turn 1, the McLaren driver was unable to slow down for the corner. While he’d nosed ahead, he ran off the track to and the place back to Sainz and became immediately vulnerable to Perez and Hamilton behind.
He lost positions to them both into Turn 11 half a lap later as he dropped three places in half a lap.
There was damage to the front of Piastri’s front wing following the clash with Sainz, forcing him into the lane as he plummeted down the order to leave him 19th and last.
With fresh medium tyres, Piastri was flying, setting the fastest lap of the race to underscore the potential he had within the car were it not for the Safety Car’s emergence.
Norris was comfortable out front, leaving Verstappen without an answer to the McLaren’s pace as he dropped six seconds back from the leader with five laps remaining.
The Red Bull Racing driver was in no-man’s land with Leclerc 2.1s further back and Sainz fourth – and under investigation for causing a collision with Piastri.
Piastri was storming through the field with fresh rubber, making short work of Magnussen and Bottas.
He had a brief squabble with Ricciardo, coming close to the RB into Turn 1, before being reminded over the radio that his team-mate was leading and that a Safety Car would be detrimental to his hopes.
In reality, there was nothing to fight for; Piastri was well out of the points with little time to do anything to change that fact.
Clearly, he understood the message and eased off in the ferocity of his charge as he became caught in a DRS train behind Albon and Ricciardo.
That quickly resolved itself as the Williams driver locked up at Turn 11 on Lap 54, skating off the road and allowing the pursuing train through.
At the end of 57 laps of racing, Norris won his first grand prix by more than seven seconds over Verstappen.
Leclerc was third from Sainz, then came Perez, Hamilton, Tsunoda, Russell, Alonso, and Ocon in the top 10.
Piastri reached the flag in 13th in a race that offered so much more were it not for Sainz, with Ricciardo 1fifth.